package string;

import java.util.HashMap;
import java.util.Map;
/**
 * 给定任意字符串,求出字符串中有多少种字符,以及每个字符的个数?
 * @author shen
 *
 */
public class Example3 {
	public static void main(String[] args) {
		 String string = "yekmaakkccekymbvb";
		 Map<Character, Integer> map = countLetters(string);
		 
		 System.out.println("total: " + map.size());  //输出总共多少种字符
		 
		 for (Map.Entry<Character, Integer> entry : map.entrySet()) {
			 //System.out.printf("letter %c: %d\n", entry.getKey(), 
	          //  entry.getValue());
			 System.out.println(entry.getKey()+ "--"+
			            entry.getValue());
		 }
	  
	 }
	 
	 //定义一个返回map的查询某字符的总数的方法 countLetters()
	 //接口 Map<K,V>,表示的就是键值对
	 //java.lang.Character类就是表示一个字符char，Character 类在对象中包装一个基本类型 char 的值。
	 static Map<Character, Integer> countLetters(String s) {
		 if (s == null) {
			 return null;
		 }
		 Map<Character, Integer> map = new HashMap<Character, Integer>();
		 char c;
		 Integer oldValue;
		 int newValue;
		 for (int i = 0; i < s.length(); i++) {
			 c = s.charAt(i);
			 
			 //V get(Object key)表示返回指定key对应的值，如果此映射不包含该键的映射关系，则返回 null。 
			 //这个map.get(c)就是返回Map<Character, Integer>中对应键Character的值Integer。
			 oldValue = map.get(c);
			 newValue = (oldValue == null) ? 1 : oldValue.intValue() + 1;
			 map.put(c, newValue);
		 }
	  return map;
	 }
}
